package com.hksj.Intelligentmanagement.myannotation;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.regex.Pattern;

/**
 * @ClassName PhoneAnnotationAnally
 * @Description TODO
 * @Author @陈章
 * @Date 2023/2/21 17:49
 * @Version 1.0
 * 自定义验证器需要实现 ConstraintValidator 接口, 其中有两个参数,第一个是验证注解,第二个是需要验证的数据类型
 * initialize() 可以在验证开始前调用注解里的方法，从而获取到一些注解里的参数，这里用不到
 * isValid() 就是判断是否合法的地方
 */
@Slf4j
public class PhoneAnnotationAnally implements ConstraintValidator<PhoneAnnotation, String> {
    //验证手机号码
    private static final Pattern PATTERN = Pattern.compile("^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$");

    /**
     * 初始化方法
     */
    @Override
    public void initialize(PhoneAnnotation constraint) {
        log.info("开始进行参数验证了...");
    }

    /**
     * 具体的验证逻辑
     *
     * @return true : 验证通过  false : 验证失败
     */
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {

        if (value == null || "".equals(value)) {
            return true;
        }
        if (!StringUtils.isEmpty(value.trim())) {
            return PATTERN.matcher(value).matches();
        }
        return false;
    }

}
